package com.xiaoyang.interceptor;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * @author lichenyang
 * @create 2021-07-14 07:30
 *
 * 所有定制Web功能的配置, 都需要实现 WebMvcConfigurer 接口
 *
 * 配置拦截器
 * 1. 写个拦截器, 实现 HandlerInterceptor 接口
 * 2. 拦截器注册到容器中 (重写 WebMvcConfigurer 接口 的 addInterceptors 方法)
 * 3. 需要指定拦截规则[如果是拦截所有, 静态资源也会被拦截]
 *
 * Filter, 和 Interceptor 的区别
 * 1. Filter 是 Servlet 定义的原生组件, 可以使用 spring 子自动装配等功能
 * 2. Interceptor 是 spring 定义的接口, 可以使用 spring 的自动装配等功能
 *
 */
@Configuration
public class WebConfig implements WebMvcConfigurer {

    /**
     * redisUrlInterceptor 是注入进来的, 而不是new出来的
     * 因为 如果使用 new 的方式 那么 RedisUrlInterceptor 中 注入的 RedisTemplate 就没法用了
     */
    @Autowired
    private RedisUrlInterceptor redisUrlInterceptor;

    /**
     * 重写 添加拦截器方法
     * @param registry
     */
//    @Override
//    public void addInterceptors(InterceptorRegistry registry) {
//        registry.addInterceptor(new LoginInterceptor())
//                // 要拦截哪些路径 /** 表示默认拦截所有请求
//                .addPathPatterns("/**")
//                // 要放行哪些路径, 比如 登录接口需要放行, 静态资源需要放行
//                .excludePathPatterns("/","/login", "/css/**", "/js/**");
//    }


    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(redisUrlInterceptor)
                // 拦截所有请求
                .addPathPatterns("/**")
                // 放行静态资源
                .excludePathPatterns("/","/login", "/css/**", "/js/**");

    }
}
